#include <bits/stdc++.h>
using namespace std;

const int N = 3e5 + 10;
int n;
long long a[N];
long long tx,tn;
long long sx[N];
long long l[N],r[N];
/**
 * 本题拆解，计算每个数可能计算的累计值
 * 最大值之和减去最小值之和
 * 累加：当前值（区间最大值）*（区间） - 当前值（区间最小值）* 区间
 */
int main()
{
    cin >> n;
    for(int i = 1; i <=n; i++)cin >> a[i];
    a[n+1]=INT_MAX;             // 最后出栈出完，然后能够完善r数组
    for(int i = 1; i <= n+1; i++){
        while(tx && a[sx[tx]] < a[i] ){
            r[sx[tx]] = i - sx[tx];     // 更新右区间
            tx--;
        }
        l[i] = i - sx[tx];
        sx[++tx] = i;
    }
    
	long long maxn=0;
	for(int i=1;i<=n;i++){
		maxn=maxn+l[i]*r[i]*a[i];
	}

    // 计算最小值
    tx = 0;
    a[n+1]=0;
    for(int i=1;i<=n+1 ;i++){
		while(tx && a[i] < a[sx[tx]]){
			r[sx[tx]]= i-sx[tx];
			tx--;
		}
		l[i] = i - sx[tx];
		sx[++tx] = i;
	}
    long long minn=0;
	for(int i=1;i<=n;i++){
		minn=minn+l[i]*r[i]*a[i];
	}
    cout << maxn - minn;
   return 0;
}
